package Test;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Locale;

/**
 * Created by IntelliJ IDEA.
 * User: 杰哥
 * Date: 2020/4/21
 * Time: 20:36
 */
public class Java8DateAPI {
    public static void main(String[] args) {

        /**
         * LocalDate是一个不可变类，
         * 在不考虑时区的情况下可以对日期（不包括时间）进行各种操作，
         * 它的默认格式是yyyy-MM-dd
         */
        LocalDate date = LocalDate.now();
        //获取当前日期以及年、月、日
        int year = date.getYear();
        int month = date.getMonthValue();
        int day = date.getDayOfMonth();
        System.out.println("当前日期：" + date);
        System.out.println("年：" + year + "月：" + month + "日：" + day);

        //获取指定的日期
        LocalDate specifiedDay = LocalDate.of(2020, 4, 21);
        System.out.println(specifiedDay);


        //equals方法用于比较两个日期是否相等
        if (date.equals(specifiedDay)) {
            System.out.println("date与specifiedDay相等");
        } else {
            if (date.isAfter(specifiedDay)) { //specifiedDay在date之前就说明date比specifiedDay晚
                System.out.println("date晚于specifiedDay");
            } else if (date.isBefore(specifiedDay)) {
                System.out.println("date早于specifiedDay");
            }
        }


        //对日期做加减运算
        System.out.println("2年后日期：" + date.plusYears(2));
        System.out.println("6月后日期：" + date.plusMonths(6));
        System.out.println("3周后日期：" + date.plusWeeks(3));
        System.out.println("15天后日期：" + date.plusDays(15));

        System.out.println("2年前日期：" + date.minusYears(2));
        System.out.println("6月前日期：" + date.minusMonths(6));
        System.out.println("3周前日期：" + date.minusWeeks(3));
        System.out.println("15天前日期：" + date.minusDays(15));


        //获取某年份的第N天的日期
        LocalDate specialDay = LocalDate.ofYearDay(2019, 100);
        System.out.println("2018年的第100天：" + specialDay);

        //获取两个日期的间隔天数
        long intervalDay = date.toEpochDay() - specifiedDay.toEpochDay();
        System.out.println("间隔天数： " + intervalDay);


        /**
         * LocalTime与LocalDate一样，也是一个不可变的类，默认格式是hh:mm:ss.zzz，它提供了对时间的各种操作
         */
        LocalTime localTime = LocalTime.now();
        int hour = localTime.getHour();
        int minute = localTime.getMinute();
        int second = localTime.getSecond();
        System.out.println("当前时间：" + localTime);
        System.out.println("时：" + hour + "  分：" + minute + "  秒：" + second);

        //获取自定义时间
        LocalTime specifiedTime = LocalTime.of(15, 30, 45);
        System.out.println("自定义时间：" + specifiedTime);

        //equals方法比较两个时间是否相等
        if(localTime.equals(specifiedTime)) {
            System.out.println("localTime与specifiedTime相等！");
        } else {
            //isAfter、isBefore方法比较两个时间的先后顺序
            if(localTime.isAfter(specifiedTime)) {
                System.out.println("localTime晚于specifiedTime！");
            }
            if(localTime.isBefore(specifiedTime)) {
                System.out.println("localTime早于specifiedTime！");
            }
        }

        System.out.println("当前时间：" + localTime);
        System.out.println("2小时后时间：" + localTime.plusHours(2));
        System.out.println("30分钟后时间：" + localTime.plusMinutes(30));
        System.out.println("500秒后日时间：" + localTime.plusSeconds(500));

        System.out.println("2小时前时间：" + localTime.minusHours(2));
        System.out.println("30分钟前时间：" + localTime.minusMinutes(30));
        System.out.println("500秒前时间：" + localTime.minusSeconds(500));


        /**
         * LocalDateTime是一个不可变的日期-时间对象，它既包含了日期同时又含有时间，默认格式是yyyy-MM-ddTHH-mm-ss.zzz
         */

        //获取当前的日期时间
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前的日期时间：" + localDateTime);

        //获取自定义的的日期时间
        LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println("自定义的日期时间：" + specifiedDateTime);

    }
}
